package entity

import (
	"time"

	"github.com/google/uuid"
	"gorm.io/datatypes"
)

// LLMProvider 大模型提供商配置模型
type LLMProvider struct {
	ID uuid.UUID `gorm:"primaryKey;type:uuid;default:uuid_generate_v4()"`

	// 提供商名称，如 "DeepSeek"
	Name string `gorm:"not null;size:255"`
	// 提供商类型，如 "deepseek"
	ProviderType string `gorm:"not null;size:100"`
	// API基础URL
	BaseURL string `gorm:"not null;size:500"`
	// API密钥
	APIKey string `gorm:"not null;size:500"`

	// 是否为默认Provider
	IsDefault bool `gorm:"default:false"`
	// 是否启用
	IsEnabled bool `gorm:"default:true"`

	// 支持的模型列表
	Models datatypes.JSON `gorm:"type:jsonb;default:'[]'"`
	// 描述
	Description string `gorm:"size:1000"`

	// 扩展配置(JSON格式)
	Config datatypes.JSON `gorm:"type:jsonb;default:'{}'"`

	CreatedAt time.Time `gorm:"autoCreateTime"`
	UpdatedAt time.Time `gorm:"autoUpdateTime"`
}

// TableName specifies the table name for the LLMProvider model.
func (LLMProvider) TableName() string {
	return "llm_providers"
}

// ProviderConfig 提供商配置结构
type ProviderConfig struct {
	MaxTokens      int               `json:"max_tokens,omitempty"`
	Temperature    float64           `json:"temperature,omitempty"`
	TopP           float64           `json:"top_p,omitempty"`
	RequestTimeout int               `json:"request_timeout,omitempty"` // 请求超时时间(秒)
	StreamTimeout  int               `json:"stream_timeout,omitempty"`  // 流式超时时间(秒)
	MaxRetries     int               `json:"max_retries,omitempty"`     // 最大重试次数
	RateLimit      int               `json:"rate_limit,omitempty"`      // 请求速率限制
	CustomHeaders  map[string]string `json:"custom_headers,omitempty"`  // 自定义请求头
}

// ModelInfo 模型信息结构
type ModelInfo struct {
	// 模型名称
	Name string `json:"name"`
	// 模型展示名称
	DisplayName string `json:"display_name"`
	// 模型描述
	Description string `json:"description"`

	// 最大token数
	MaxTokens int `json:"max_tokens"`

	// 每1M tokens输入价格
	InputPrice float64 `json:"input_price"`
	// 每1M tokens输出价格
	OutputPrice float64 `json:"output_price"`

	// 是否为该Provider的默认模型
	IsDefault bool `json:"is_default"`
}
